package io.renren.modules.base.service.impl;

import io.renren.common.utils.RandomId;
import io.renren.modules.base.dao.*;
import io.renren.modules.base.entity.BasePhaseInfoEntity;
import io.renren.modules.base.entity.BaseTaskInfoEntity;
import io.renren.modules.base.entity.BaseTaskWorkitemEntity;
import io.renren.modules.base.entity.BaseTemplateTaskEntity;
import io.renren.modules.base.service.BaseTaskInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;


@Service("baseTaskInfoService")
public class BaseTaskInfoServiceImpl implements BaseTaskInfoService {
    @Autowired
    private BaseTaskInfoDao baseTaskInfoDao;
    @Autowired
    private BaseTemplateTaskDao baseTemplateTaskDao;
    @Autowired
    private BasePhaseInfoDao basePhaseInfoDao;
    @Autowired
    private BaseTaskWorkitemDao baseTaskWorkitemDao;
    @Autowired
    private BaseWorkitemInfoDao baseWorkitemInfoDao;

    @Override
    public BaseTaskInfoEntity queryObject(String id) {

        BaseTaskInfoEntity baseTaskInfoEntity = baseTaskInfoDao.queryObject(id);
        BasePhaseInfoEntity basePhaseInfoEntity = basePhaseInfoDao.queryObject(baseTaskInfoEntity.getPhaseId());
        //baseTaskInfoEntity.setPhaseId(basePhaseInfoEntity.getPhaseName());
        baseTaskInfoEntity.setPhaseName(basePhaseInfoEntity.getPhaseName());
        return baseTaskInfoEntity;
    }

    @Override
    public List<BaseTaskInfoEntity> queryList(Map<String, Object> map) {

        List<BaseTaskInfoEntity> baseTaskInfoEntityList1 = baseTaskInfoDao.queryList(map);
        return baseTaskInfoEntityList1;
    }

    @Override
    public int queryTotal(Map<String, Object> map) {
        return baseTaskInfoDao.queryTotal(map);
    }

    @Override
    public void save(BaseTaskInfoEntity baseTaskInfo) {
		/*List<BaseTaskInfoEntity> baseTaskInfoEntityList = baseTaskInfoDao.queryTemplateTask(baseTaskInfo.getTemplateId());
		if (baseTaskInfoEntityList!= null && baseTaskInfoEntityList.size()>0){
			baseTaskInfo.setOrder(baseTaskInfoEntityList.size()+1);
		}else {
			baseTaskInfo.setOrder(1);
		}
		*/
        String taskId = RandomId.createId() + "";
        baseTaskInfo.setId(taskId);
        //先设置成固定工期
        baseTaskInfo.setDurationType("1");
        //设置工期要求单位：天
//        baseTaskInfo.setDurationRequire(baseTaskInfo.getDurationRequire()+"天");

        baseTaskInfoDao.save(baseTaskInfo);/*
		BaseTemplateTaskEntity baseTemplateTaskEntity = new BaseTemplateTaskEntity();
		baseTemplateTaskEntity.setId(RandomId.createId()+"");
		baseTemplateTaskEntity.setTaskId(taskId);
		baseTemplateTaskEntity.setTemplateId(baseTaskInfo.getTemplateId());
        baseTemplateTaskDao.save(baseTemplateTaskEntity);*/

    }

    @Override
    public void update(BaseTaskInfoEntity baseTaskInfo) {
        System.out.println(baseTaskInfo);
        BaseTemplateTaskEntity baseTemplateTaskEntity = new BaseTemplateTaskEntity();
        baseTemplateTaskEntity.setTemplateId(baseTaskInfo.getTemplateId());
        baseTemplateTaskEntity.setTaskId(baseTaskInfo.getId());
        baseTemplateTaskDao.updateTemplate(baseTemplateTaskEntity);
        baseTaskInfoDao.update(baseTaskInfo);
    }


    @Override
    public void updateBase(BaseTaskInfoEntity baseTaskInfo) {
        BaseTemplateTaskEntity baseTemplateTaskEntity = new BaseTemplateTaskEntity();
        baseTemplateTaskEntity.setTemplateId(baseTaskInfo.getTemplateId());
        baseTemplateTaskEntity.setTaskId(baseTaskInfo.getId());
        baseTemplateTaskDao.updateTemplate(baseTemplateTaskEntity);
        baseTaskInfoDao.update(baseTaskInfo);
    }


    @Override
    public void updateTask(BaseTaskInfoEntity baseTaskInfo) {
        baseTaskInfoDao.update(baseTaskInfo);
    }


    @Override
    public void delete(String id) {
        baseTaskInfoDao.delete(id);
    }

    @Override
    public void deleteBatch(String[] ids) {

        baseTemplateTaskDao.deleteTask(ids);
        baseTaskInfoDao.deleteBatch(ids);
    }

    @Override
    public List<BaseTaskInfoEntity> allList() {
        return baseTaskInfoDao.allList();
    }

    @Override
    public List queryTask(String woekitmeId) {
        List list = new ArrayList();
        List<Map<String, Object>> taskList = baseTaskInfoDao.queryTask(woekitmeId);
        List<String> taskIdList = new ArrayList<>();
        String[] taskId = null;
        if (taskList != null && taskList.size() > 0) {
            for (int i = 0; i < taskList.size(); i++) {
                taskIdList.add((String) taskList.get(i).get("id"));
            }
            if (taskIdList != null && taskIdList.size() > 0) {
                taskId = taskIdList.toArray(new String[taskIdList.size()]);
            }
            List<Map<String, Object>> workitemList = baseTaskInfoDao.queryWorkitem(taskId);
            list.add(taskList);
            list.add(workitemList);
        }
        return list;
    }

    @Override
    public List queryTemplateTask(String templateId) {
        List list = new ArrayList();
        List<Map<String, Object>> task = baseTaskInfoDao.queryTemplateIdTask(templateId);
        List<Map<String, Object>> taskList = baseTaskInfoDao.queryNoTemplateTask();
        taskList.removeAll(task);
        List<String> taskIdList = new ArrayList<>();
        String[] taskId = null;
        if (taskList != null && taskList.size() > 0) {
            for (int i = 0; i < taskList.size(); i++) {

                taskIdList.add((String) taskList.get(i).get("id"));
            }
            if (taskIdList != null && taskIdList.size() > 0) {
                taskId = taskIdList.toArray(new String[taskIdList.size()]);
            }
            //List<Map<String,Object>> workitemList = baseTaskInfoDao.queryWorkitem(taskId);
            list.add(taskList);
            //list.add(workitemList);
        }
        return list;
    }

    @Override
    public void deleteTask(String taskId, String templateId,List<BaseTaskInfoEntity> baseTaskInfoEntities) {
        BaseTemplateTaskEntity baseTemplateTaskEntity = new BaseTemplateTaskEntity();
        baseTemplateTaskEntity.setTemplateId(templateId);
        baseTemplateTaskEntity.setTaskId(taskId);
        //删除选中项
        baseTemplateTaskDao.deleteTas(baseTemplateTaskEntity);
        //排好序后跟新
        if (baseTaskInfoEntities != null && baseTaskInfoEntities.size()>0){
            List<BaseTemplateTaskEntity> baseTemplateTaskEntityList = new ArrayList<>();
            for (int i = 0 ; i < baseTaskInfoEntities.size() ; i++){
                BaseTemplateTaskEntity baseTemplateTask = new BaseTemplateTaskEntity();
                baseTemplateTask.setTemplateId(baseTaskInfoEntities.get(i).getTemplateId());
                baseTemplateTask.setTaskId(baseTaskInfoEntities.get(i).getId());
                baseTemplateTask.setOrder(baseTaskInfoEntities.get(i).getTwOrder());
                baseTemplateTaskEntityList.add(baseTemplateTask);
            }
            baseTemplateTaskDao.updateOrder(baseTemplateTaskEntityList);
        }

    }

    @Override
    public void templateAddTask(List<BaseTaskInfoEntity> baseTaskInfoEntities) {
        if (baseTaskInfoEntities != null && baseTaskInfoEntities.size() > 0) {
            List<BaseTemplateTaskEntity> templateTaskList = baseTemplateTaskDao.queryTaskList(baseTaskInfoEntities.get(0).getTemplateId());
            List<BaseTemplateTaskEntity> baseTemplateTaskEntityList = new ArrayList<>();
            for (int i = 0; i < baseTaskInfoEntities.size(); i++) {
                BaseTemplateTaskEntity baseTemplateTaskEntity = new BaseTemplateTaskEntity();
                String templateTaskId = RandomId.createId() + i + "";
                baseTemplateTaskEntity.setId(templateTaskId);
                baseTemplateTaskEntity.setTaskId(baseTaskInfoEntities.get(i).getId());
                baseTemplateTaskEntity.setTemplateId(baseTaskInfoEntities.get(i).getTemplateId());
                if (templateTaskList != null && templateTaskList.size() > 0) {
                    baseTemplateTaskEntity.setOrder(templateTaskList.size() + i + 1);
                } else {
                    baseTemplateTaskEntity.setOrder(i + 1);
                }
                baseTemplateTaskEntityList.add(baseTemplateTaskEntity);
            }
            baseTemplateTaskDao.templateAddTask(baseTemplateTaskEntityList);
        }

    }

    @Override
    public void updateOrder(List<BaseTaskInfoEntity> baseTaskInfoEntities) {
        List<BaseTemplateTaskEntity> templateTaskEntityList = new ArrayList<>();
        if (baseTaskInfoEntities != null && baseTaskInfoEntities.size() > 0) {
            for (int i = 0; i < baseTaskInfoEntities.size(); i++) {
                BaseTemplateTaskEntity baseTemplateTaskEntity = new BaseTemplateTaskEntity();
                baseTemplateTaskEntity.setTaskId(baseTaskInfoEntities.get(i).getId());
                baseTemplateTaskEntity.setOrder(baseTaskInfoEntities.get(i).getTwOrder());
                baseTemplateTaskEntity.setTemplateId(baseTaskInfoEntities.get(i).getTemplateId());
                templateTaskEntityList.add(baseTemplateTaskEntity);
            }
        }
        if (templateTaskEntityList != null && templateTaskEntityList.size() > 0) {
            baseTemplateTaskDao.updateOrder(templateTaskEntityList);
        }
    }

    @Override
    public BaseTaskInfoEntity queryObjectInfo(String id) {
        return baseTaskInfoDao.queryObjectInfo(id);
    }

}
